//导入 mongoose
const mongoose = require("mongoose")

// 设置 strictQuery 为 true 去除提示
mongoose.set("strictQuery", true)

//3. 连接 mongodb 服务 bobo数据库的名称
mongoose.connect("mongodb://127.0.0.1:27017/bobo")

// 设置连接成功的回调  once 一次  事件回调函数只执行一次 推荐使用once
mongoose.connection.on("open", () => {
  // 创建文档的结构对象 设置集合中文档的属性以及属性值的类型
  let BookSchema = new mongoose.Schema({
    name: {
      type: String,
      required: true, // 必传
      unique: true, // 唯一值 重建集合才有效果
    },
    author: {
      type: String,
      default: "匿名",
    },
    style: {
      type: String,
      enum: ["言情", "城市", "历史"], // 枚举 设置值必须为数组中的
    },
    price: Number,
    is_hot: Boolean,
    tags: Array,
    pub_time: Date,
    // test:mongoose.Schema.Types.Mixed 任一类型
    // test:mongoose.Schema.Types.ObjectId // 外键 另外一个文档存入此文档 联合查询
  })
  // 创建模型对象，对文档操作的封装对象  参数一数据库文档名称 参数二类型限制
  let BookModel = mongoose.model("users", BookSchema)
  // 新增 BookModel.insertMany添加多个
  BookModel.create(
    {
      name: "三国演义",
      author: "罗贯中",
      price: 200,
      is_hot: true,
      tags: ["励志", "历史"],
      pub_time: new Date(),
      style: "历史",
    },
    (err, data) => {
      //判断是否有错误
      if (err) {
        console.log(err)
        return
      }
      // 如果没有出错, 则输出插入后的文档对象
      console.log(data)
      // 关闭数据库连接 (项目运行过程中, 不会添加该代码)
      mongoose.disconnect()
    }
  )
})

// 设置连接错误的回调
mongoose.connection.on("error", () => {
  console.log("连接失败")
})

//设置连接关闭的回调
mongoose.connection.on("close", () => {
  console.log("连接关闭")
})
